#!/usr/bin/python
# -*- coding: utf-8 -*-
'''
查找测试用例，生成测试套件
    unittest.TestLoader()/unittest.defaultTestLoader()
    实例化testloader()类
    调用discover方法生成测试套件
    返回测试套件

运行测试套件，生成测试报告
    创建测试报告名及路径
    以写入模式打开文件
    实例化HTMLTestRunner得到一个runner对象
    调用实例方法执行测试用例
    关闭文件

清理报告
    方案一：全部清理
        os.dirlist()获取某个文件下全部文件
        循环删除没一个文件os.remove

    方案二：保留最新的N个
        os.dirlist()获取某个文件下全部文件
        得到一个列表
        循环删除每一个文件os.remove

    方案三：按文件创建时间删除
        os.dirlist()获取某个文件下全部文件
        获取文件生成时间os.getctime()
        将每个文件名和创建时间组成一个字典：字典推导式：｛创建时间：文件名｝，
        按时间进行排序
        得到最新的5个列表
        循环删除没一个文件os.remove
'''

import unittest
import os, time
import Review_test.interface03.HTMLTestRunner
from Review_test.interface03.common.sendEmail import *

# 查找测试用例，生成测试套件
def creat_suite():
#     unittest.TestLoader()/unittest.defaultTestLoader()
    case_dir = os.path.dirname(__file__) + r'/testCase/'
#     实例化testloader()类
    loader = unittest.TestLoader()
#     调用discover方法生成测试套件
    suit = loader.discover(start_dir=case_dir, pattern='test*.py')
#     返回测试套件
    return suit


# 方案二：保留最新的N个
def auto_clear():
# os.dirlist()
    dir = os.path.dirname(__file__) + r'/testReport'
# 获取某个文件下全部文件
    file_list = os.listdir(dir)
# 得到一个列表
    for i in file_list[:-3]:
        if '.html' in i:
# 循环删除每一个文件os.remove
            os.remove(dir + '/' + i)


if __name__ == '__main__':
# 清理报告文件
    auto_clear()
# 运行测试套件，生成测试报告
    suite = creat_suite()
    cur_time = time.strftime('%Y_%d_%m_%H_%M_%S', time.localtime())
#     创建测试报告名及路径
    report = os.path.dirname(__file__) + r'/testReport/' + cur_time + r'report.html'
#     以写入模式打开文件
    with open(report , 'wb') as fp:
#     实例化HTMLTestRunner得到一个runner对象
        runner = Review_test.interface03.HTMLTestRunner.HTMLTestReportCN(stream=fp, title='接口自动化测试报告',
                                                             description='接口测试结果', verbosity=2)
#     调用实例方法执行测试用例
        runner.run(suite)
#发送测试报告
    #实例化发送方法
    send = SendEmail()
    send.send_email(report)